﻿''' <summary>
''' Ein Scrollbar fuer eine Y-Achse (nur eine Anzeige) mit GetValuePos sollte dann eine Verknuepfung erstellt werden.
''' </summary>
''' <remarks></remarks>
Public Class ObjektYScrollbar
    Inherits Objekt2D

    ''' <summary>
    ''' wenn true haben wir auf diesen Regler Button geklickt und wechseln hoch runter
    ''' </summary>
    ''' <remarks></remarks>
    Private AktivY As Boolean = False
    Public UpDownPfeilHoehe As Integer = 11
    Public SchiebeReglerUndLeereHoehe As Integer = 15
    Public Scrollbarbreite As Integer = 16

    Private IndexY As Integer = 0
    Private YIndexMax As Integer = 0

    Public Sub New(ByVal ReglerBildID As Integer, ByVal ReglerHoehe As Integer, ByVal Pos As Point, ByVal Fixed As PointF, Optional ByVal Handler As ObjektPanel = Nothing, Optional ByVal UpDownPfeilHoehe As Integer = 11, Optional ByVal SchiebeReglerUndLeereHoehe As Integer = 15, Optional ByVal Scrollbarbreite As Integer = 16)
        MyBase.New("", New Rectangle(Pos, New Size(Scrollbarbreite, ReglerHoehe + 2 * UpDownPfeilHoehe)), Pos, Fixed, Handler)
        Me.UpDownPfeilHoehe = UpDownPfeilHoehe
        Me.SchiebeReglerUndLeereHoehe = SchiebeReglerUndLeereHoehe
        Me.Scrollbarbreite = Scrollbarbreite

        TexturID = ReglerBildID
        YIndexMax = ReglerHoehe - SchiebeReglerUndLeereHoehe
        If YIndexMax = 0 Then YIndexMax = 1
    End Sub


    Public Overrides Function Keydown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) As Boolean
        Return False
    End Function


    Public Overrides Function KeyUp(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) As Boolean
        Return False
    End Function


    Public Overrides Function MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) As Boolean
        Dim R1 = New Rectangle(Koordinaten.X, Koordinaten.Y, Scrollbarbreite, Bildgroesse.Height)
        If R1.Contains(e.X, e.Y) Then
            R1.Height = UpDownPfeilHoehe
            If R1.Contains(e.X, e.Y) Then
                IndexY -= 1
                If IndexY < 0 Then IndexY = 0
            Else
                R1.Y = Koordinaten.Y + Bildgroesse.Height - UpDownPfeilHoehe
                If R1.Contains(e.X, e.Y) Then
                    IndexY += 1
                    If IndexY > YIndexMax Then IndexY = YIndexMax
                Else
                    AktivY = True
                End If
            End If
        End If

    End Function


    Public Overrides Function MouseEnter(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) As Boolean
        If AktivY Then
            If Koordinaten.Y + UpDownPfeilHoehe > e.Y Then
                IndexY = 0
            ElseIf Koordinaten.Y + Rechteck.Height - UpDownPfeilHoehe - SchiebeReglerUndLeereHoehe < e.Y Then
                IndexY = YIndexMax
            Else
                IndexY = e.Y - Koordinaten.Y - UpDownPfeilHoehe
            End If
        End If
    End Function


    Public Overrides Function MouseUp(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) As String
        AktivY = False
        Return ""
    End Function


    Public Overrides Sub Malen()
        If Handler IsNot Nothing Then
            If Not Handler.IsVisible(New Rectangle(Koordinaten.X, Koordinaten.Y, Rechteck.Width, Rechteck.Height), True) Then
                Exit Sub
            End If
        End If
        Dim sngRotation As Double = 0
        Dim intColor As Color = Color.FromArgb(255, 255, 255, 255)
        Dim ValueBreite As Integer = Bildgroesse.Height - 2 * UpDownPfeilHoehe
        Grafikengine.ptfRotCenter = New Point(0, 0)

        With Grafikengine.recBild
            .X = 0 : .Width = Scrollbarbreite
            .Y = 0 : .Height = UpDownPfeilHoehe
        End With

        Grafikengine.ptfPosition = Koordinaten
        Grafikengine.szfScale = Nothing
        'wir malen den oberen Pfeil
        Grafikengine.Sprite.Draw2D(TexturenHalter.UpDownRegler(TexturID), Grafikengine.recBild, Grafikengine.szfScale, Grafikengine.ptfRotCenter, sngRotation, Grafikengine.ptfPosition, intColor)

        'wir malen den Unteren Pfeil
        With Grafikengine.recBild
            .X = 0 : .Width = Scrollbarbreite
            .Y = SchiebeReglerUndLeereHoehe * 2 + UpDownPfeilHoehe : .Height = UpDownPfeilHoehe
        End With
        Grafikengine.ptfPosition = New Point(Koordinaten.X, Koordinaten.Y + ValueBreite + UpDownPfeilHoehe)
        Grafikengine.Sprite.Draw2D(TexturenHalter.UpDownRegler(TexturID), Grafikengine.recBild, Grafikengine.szfScale, Grafikengine.ptfRotCenter, sngRotation, Grafikengine.ptfPosition, intColor)

        'Wir finden heraus wie oft wir den Mittelteilmalen muessen
        Dim Breite As Integer = Divi(ValueBreite, SchiebeReglerUndLeereHoehe)
        'Wir malen alle Mittelteile bis auf den letzten
        With Grafikengine.recBild
            .X = 0 : .Width = Scrollbarbreite
            .Y = SchiebeReglerUndLeereHoehe + UpDownPfeilHoehe : .Height = SchiebeReglerUndLeereHoehe
        End With
        Grafikengine.ptfPosition.Y = Koordinaten.Y + UpDownPfeilHoehe
        For I = 0 To Breite - 2
            Grafikengine.Sprite.Draw2D(TexturenHalter.UpDownRegler(TexturID), Grafikengine.recBild, Grafikengine.szfScale, Grafikengine.ptfRotCenter, sngRotation, Grafikengine.ptfPosition, intColor)
            Grafikengine.ptfPosition.Y += SchiebeReglerUndLeereHoehe
        Next
        'Der letzte wird jetzt gemalt, weil er eine Ausnahme ist.
        Grafikengine.ptfPosition.Y = Koordinaten.Y + UpDownPfeilHoehe + ValueBreite - SchiebeReglerUndLeereHoehe
        Grafikengine.Sprite.Draw2D(TexturenHalter.UpDownRegler(TexturID), Grafikengine.recBild, Grafikengine.szfScale, Grafikengine.ptfRotCenter, sngRotation, Grafikengine.ptfPosition, intColor)
        'So jetzt muessen wir noch den Regler malen
        Grafikengine.ptfPosition.Y = IndexY + Koordinaten.Y + UpDownPfeilHoehe

        With Grafikengine.recBild
            .X = 0 : .Width = Scrollbarbreite
            .Y = UpDownPfeilHoehe : .Height = SchiebeReglerUndLeereHoehe
        End With

        Grafikengine.Sprite.Draw2D(TexturenHalter.UpDownRegler(TexturID), Grafikengine.recBild, Grafikengine.szfScale, Grafikengine.ptfRotCenter, sngRotation, Grafikengine.ptfPosition, intColor)

    End Sub
    ''' <summary>
    ''' Gibt den Ort des Reglers in Prozent an 100%=Unten; 0%=Oben
    ''' </summary>
    ''' <returns></returns>
    ''' <remarks></remarks>
    Public Function GetValuePos() As Single
        Return CSng(IndexY / YIndexMax)

    End Function
    Public Sub IncreaseYPos(ByVal Add As Integer)
        IndexY += Add
        If IndexY < 0 Then IndexY = 0
        If IndexY > YIndexMax Then IndexY = YIndexMax
    End Sub
    Public Sub SetYPos(ByVal Add As Integer)
        IndexY = Add
        If IndexY < 0 Then IndexY = 0
        If IndexY > YIndexMax Then IndexY = YIndexMax
    End Sub
    Public Overloads Overrides Function MouseWheel(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) As Boolean

    End Function
End Class
''' <summary>
''' Ein Scrollbar fuer eine X-Achse (nur eine Anzeige) mit GetValuePos sollte dann eine Verknuepfung erstellt werden.
''' </summary>
''' <remarks></remarks>
Public Class ObjektXScrollbar
    Inherits Objekt2D
    ''' <summary>
    ''' wenn true haben wir auf diesen Regler Button geklickt und wechseln hoch runter
    ''' </summary>
    ''' <remarks></remarks>
    Private AktivX As Boolean = False
    Public UpDownPfeilBreite As Integer = 11
    Public SchiebeReglerUndLeereBreite As Integer = 15
    Public ScrollbarHoehe As Integer = 16

    Private IndexX As Integer = 0
    Private XIndexMax As Integer = 0

    Public Sub New(ByVal ReglerBildID As Integer, ByVal ReglerBreite As Integer, ByVal Pos As Point, ByVal Fixed As PointF, Optional ByVal Handler As ObjektPanel = Nothing, Optional ByVal UpDownPfeilBreite As Integer = 11, Optional ByVal SchiebeReglerUndLeereBreite As Integer = 15, Optional ByVal ScrollbarHoehe As Integer = 16)
        MyBase.New("Keine", New Rectangle(Pos, New Size(ReglerBreite + 2 * UpDownPfeilBreite, ScrollbarHoehe)), Pos, Fixed, Handler)
        Me.UpDownPfeilBreite = UpDownPfeilBreite
        Me.SchiebeReglerUndLeereBreite = SchiebeReglerUndLeereBreite
        Me.ScrollbarHoehe = ScrollbarHoehe
        TexturID = ReglerBildID
        XIndexMax = ReglerBreite - SchiebeReglerUndLeereBreite
        If XIndexMax = 0 Then XIndexMax = 1

    End Sub


    Public Overrides Function Keydown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) As Boolean
        Return False
    End Function


    Public Overrides Function KeyUp(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) As Boolean
        Return False
    End Function


    Public Overrides Function MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) As Boolean
        Dim R1 = New Rectangle(Koordinaten.X, Koordinaten.Y, Bildgroesse.Width, ScrollbarHoehe)
        If R1.Contains(e.X, e.Y) Then
            R1.Width = UpDownPfeilBreite
            If R1.Contains(e.X, e.Y) Then
                IndexX -= 1
                If IndexX < 0 Then IndexX = 0
            Else
                R1.X = Koordinaten.X + Bildgroesse.Width - UpDownPfeilBreite
                If R1.Contains(e.X, e.Y) Then
                    IndexX += 1
                    If IndexX > XIndexMax Then IndexX = XIndexMax
                Else
                    AktivX = True
                End If
            End If
        End If

    End Function


    Public Overrides Function MouseEnter(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) As Boolean
        If AktivX Then
            If Koordinaten.X + UpDownPfeilBreite > e.X Then
                IndexX = 0
            ElseIf Koordinaten.X + Rechteck.Width - UpDownPfeilBreite - SchiebeReglerUndLeereBreite < e.X Then
                IndexX = XIndexMax
            Else
                IndexX = e.X - Koordinaten.X - UpDownPfeilBreite
            End If
        End If
    End Function


    Public Overrides Function MouseUp(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) As String
        AktivX = False
        Return ""
    End Function


    Public Overrides Sub Malen()
        If Handler IsNot Nothing Then
            If Not Handler.IsVisible(New Rectangle(Koordinaten.X, Koordinaten.Y, Rechteck.Width, Rechteck.Height), True) Then
                Exit Sub
            End If
        End If
        Dim sngRotation As Double = 0
        Dim intColor As Color = Color.FromArgb(255, 255, 255, 255)
        Dim ValueBreite As Integer = Bildgroesse.Width - 2 * UpDownPfeilBreite
        Grafikengine.ptfRotCenter = New Point(0, 0)

        With Grafikengine.recBild
            .X = 0 : .Width = UpDownPfeilBreite
            .Y = 0 : .Height = ScrollbarHoehe
        End With

        Grafikengine.ptfPosition = Koordinaten
        Grafikengine.szfScale = Nothing
        'wir malen den oberen Pfeil
        Grafikengine.Sprite.Draw2D(TexturenHalter.UpDownRegler(TexturID), Grafikengine.recBild, Grafikengine.szfScale, Grafikengine.ptfRotCenter, sngRotation, Grafikengine.ptfPosition, intColor)

        'wir malen den Unteren Pfeil
        With Grafikengine.recBild
            .X = SchiebeReglerUndLeereBreite * 2 + UpDownPfeilBreite : .Width = UpDownPfeilBreite
            .Y = 0 : .Height = ScrollbarHoehe
        End With
        Grafikengine.ptfPosition = New Point(Koordinaten.X + ValueBreite + UpDownPfeilBreite, Koordinaten.Y)
        Grafikengine.Sprite.Draw2D(TexturenHalter.UpDownRegler(TexturID), Grafikengine.recBild, Grafikengine.szfScale, Grafikengine.ptfRotCenter, sngRotation, Grafikengine.ptfPosition, intColor)

        'Wir finden heraus wie oft wir den Mittelteilmalen muessen
        Dim Breite As Integer = Divi(ValueBreite, SchiebeReglerUndLeereBreite)
        'Wir malen alle Mittelteile bis auf den letzten
        With Grafikengine.recBild
            .X = SchiebeReglerUndLeereBreite + UpDownPfeilBreite : .Width = SchiebeReglerUndLeereBreite
            .Y = 0 : .Height = ScrollbarHoehe
        End With
        Grafikengine.ptfPosition.X = Koordinaten.X + UpDownPfeilBreite
        For I = 0 To Breite - 2
            Grafikengine.Sprite.Draw2D(TexturenHalter.UpDownRegler(TexturID), Grafikengine.recBild, Grafikengine.szfScale, Grafikengine.ptfRotCenter, sngRotation, Grafikengine.ptfPosition, intColor)
            Grafikengine.ptfPosition.X += SchiebeReglerUndLeereBreite
        Next
        'Der letzte wird jetzt gemalt, weil er eine Ausnahme ist.
        Grafikengine.ptfPosition.X = Koordinaten.X + UpDownPfeilBreite + ValueBreite - SchiebeReglerUndLeereBreite
        Grafikengine.Sprite.Draw2D(TexturenHalter.UpDownRegler(TexturID), Grafikengine.recBild, Grafikengine.szfScale, Grafikengine.ptfRotCenter, sngRotation, Grafikengine.ptfPosition, intColor)
        'So jetzt muessen wir noch den Regler malen
        Grafikengine.ptfPosition.X = IndexX + Koordinaten.X + UpDownPfeilBreite

        With Grafikengine.recBild
            .X = UpDownPfeilBreite : .Width = SchiebeReglerUndLeereBreite
            .Y = 0 : .Height = ScrollbarHoehe
        End With

        Grafikengine.Sprite.Draw2D(TexturenHalter.UpDownRegler(TexturID), Grafikengine.recBild, Grafikengine.szfScale, Grafikengine.ptfRotCenter, sngRotation, Grafikengine.ptfPosition, intColor)

    End Sub
    ''' <summary>
    ''' Gibt den Ort des Reglers in Prozent an 100%=Unten; 0%=Oben
    ''' </summary>
    ''' <returns></returns>
    ''' <remarks></remarks>
    Public Function GetValuePos() As Single
        Return CSng(IndexX / XIndexMax)

    End Function
    Public Sub IncreaseXPos(ByVal Add As Integer)
        IndexX += Add
        If IndexX < 0 Then IndexX = 0
        If IndexX > XIndexMax Then IndexX = XIndexMax
    End Sub

    Public Overloads Overrides Function MouseWheel(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) As Boolean

    End Function
End Class
